package com.project_doctor.controller;

import com.project_doctor.pojo.Doctor;
import com.project_doctor.pojo.dto.DoctorRequest;
import com.project_doctor.service.DoctorService;
import com.project_doctor.utils.JwtUtil;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 医生信息管理控制器
 * 
 * 主要功能：
 * 1. 医生基础信息查询
 * 2. 医生专业资质展示
 * 3. 支持契约签署时的医生选择
 * 
 * 业务场景：
 * - 居民选择家庭医生时查看医生信息
 * - 管理后台展示医生团队信息
 * - 契约管理中关联医生数据
 */
@RestController
@RequestMapping("/doctors")
public class DoctorController {
    @Autowired
    private DoctorService tDoctorService;

    @Autowired
    private JwtUtil jwtUtil;

    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    DoctorService doctorService;
    //注入Rabbit模板类
    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * 获取所有医生信息列表
     * 
     * 业务逻辑：
     * 1. 查询所有在职医生的基础信息
     * 2. 包含医生姓名、职称、专业领域、联系方式等
     * 3. 用于前端下拉选择或列表展示
     * 4. 支持居民选择心仪的家庭医生
     * 
     * 前端使用场景：
     * - 契约申请页面的医生选择下拉框
     * - 医生团队展示页面
     * - 医生信息查询页面
     * 
     * @return 医生信息列表（包含ID、姓名、职称、专业、科室等基础信息）
     */
    @GetMapping("/getAllDoctors")
    public ResponseEntity<?> getAllDoctors(){
        return ResponseEntity.ok(tDoctorService.list());
    }

    @PostMapping("/getAllDoctors")
    public ResponseEntity<?> getAllDoctors(@RequestBody(required = false) DoctorRequest doctorRequest) {
        List<Doctor> list = doctorService.getAllDoctors(doctorRequest);
        return ResponseEntity.ok(list);
    }
    @PostMapping("/getDoctorByBatchId")
    public ResponseEntity<?> getDoctorByBatchId(@RequestBody Map<String,List<Long>> map) {
        List<Long> ids = map.get("receiverIds");
        List<Doctor> doctors = doctorService.getDoctorByBatchId(ids);
        return ResponseEntity.ok(doctors);
    }

    /**
     * 获取用户信息
     */
    @GetMapping("/{userId}")
    public Doctor getUserInfo(@PathVariable Long userId) {
        return doctorService.getUserById(userId);
    }

    /**
     * 更新用户状态
     */
    @PostMapping("/{userId}/status")
    public Map<String, Object> updateUserStatus(
            @PathVariable Long userId,
            @RequestBody Map<String, String> request) {

        String status = request.get("status");
        doctorService.updateUserStatus(userId, status);

        Map<String, Object> result = new HashMap<>();
        result.put("success", true);
        result.put("message", "用户状态更新成功");
        return result;
    }

    /**
     * 获取当前登录用户信息（从JWT令牌中解析用户ID）
     */
    @GetMapping("/current")
    public Doctor getCurrentUser(@RequestHeader("Authorization") String token) {
        // 从JWT令牌中获取用户ID
        String userId = jwtUtil.getValue(token,"userId");
        if (userId != null) {
            return doctorService.getUserById(Long.valueOf(userId));
        }
        return null;
    }
}
